package com.yinhai.xz.mdtj.event.event.guangze.entity;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 原子类的测试类。
 * 基本上所有的原子包装类都差不多是一样的。结构如下：原始的原子类中，没有【AtomicDouble】、【AtomicFloat】类。
 *      1：一个final 的 unsafe类：它就是通过操作【unsafe#compareAndSwap】方法，来实现CAS的。
 *      2：valueOffset：一个final修饰的long类型。这个就是CAS操作中需要的【地址】。这个也是通过【unsafe类获取的】。
 *      3：value：一个由【volatile】变量修饰的相应的变量，比如【int】、【boolean】、【long】等。
 *      4：VM_SUPPORTS_LONG_CAS：一个final修饰的boolean，注意：【只有部分类有这个变量】。比如【AtomicLong】。
 *          这个类的作用是：判断当前的机器支不支持64位操作系统，如果支持，那么就可以直接对long、double等64位的对象进行操作，
 *          如果不支持，就需要通过一些额外的手段，进行操作。比如【AtomicLongFieldUpdater#newUpdater】方法。
 * AtomicLongFieldUpdater：这个类是一个专门进行CAS操作的类（只针对于64位的数据）。它会判断：如果当前虚拟机支持64位的，则使用【CASUpdater】进行CAS操作。
 *      否则使用【LockedUpdater】进行操作。
 *     CASUpdater：看代码得知，这个是直接调用【unsafe#CAS】进行操作。
 *     LockedUpdater：看代码得知，这个类的原子操作，需要使用【synchronized】。
 */
public class AtomicIntegerTest {


    public static void main(String[] args) {
        AtomicInteger atomicInteger = new AtomicInteger(0);

        atomicInteger.get();
    }
}
